home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume2 / unix / sh.1 < prev    next >
Text File  |  1988-12-12  |  29KB  |  792 lines

  1. Path: xanth!ames!mailrus!ulowell!page
  2. From: page@swan.ulowell.edu (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v02i098:  sh - unpack shar files
  5. Message-ID: <10676@swan.ulowell.edu>
  6. Date: 12 Dec 88 22:30:30 GMT
  7. Organization: University of Lowell, Computer Science Dept.
  8. Lines: 781
  9. Approved: page@swan.ulowell.edu
  10.  
  11. Submitted-by: guilford@turing.cs.rpi.edu (Jim Guilford)
  12. Posting-number: Volume 2, Issue 98
  13. Archive-name: unix/sh.1
  14.  
  15. [uuencoded binary included - it's small.  ..Bob]
  16.  
  17. # This is a shell archive.  Remove anything before this line,
  18. # then unpack it by saving it in a file and typing "sh file"
  19. # Created Tue Nov 29 09:00:48 1988
  20. #
  21. # This archive contains:
  22. #        NOTES
  23. #        README
  24. #        sh.c
  25. #        sh.uu
  26. echo "Creating NOTES"
  27. cat > NOTES <<"***EOF NOTES***"
  28. Here is yet another version of "sh" -- a program to unshar file from
  29. over the net. I wrote it from my own need--I found existing programs
  30. to behave poorly (not understand formats, guru, etc.) I put into it
  31. the features that were important to me (and left out the ones I didn't
  32. need :-). Particularly, I intended it to be expandable to different
  33. formats. At this point it understands about cat and a simple (and
  34. common) form of sed. Adding new forms should be easy (although I have
  35. not had needed to do this myself to unshar files I've found).
  36.  
  37. It should not need a lot of stack space to run.
  38.  
  39. I've built into it a variety of options so that it can be customized
  40. for individual preferences. These allow one to decide how verbose its
  41. messages are or how paranoid it is about strange forms.
  42.  
  43. I have not done extensive testing on it (remember, I originally wrote
  44. this for myself), but I have been using it for the past six months
  45. with no problems.
  46.  
  47. I have not included a "shar" program with this, as I found the
  48. existing one(s) to work acceptably well.
  49. ***EOF NOTES***
  50. echo "Creating README"
  51. cat > README <<"***EOF README***"
  52. SH -- by Jim Guilford
  53.  
  54. This is my version of a utility to unshar files. I wrote it as I found
  55. existing programs to be unreliable and limited. This works to the best
  56. of my knowledge, but I make no guarrantees.
  57.  
  58. The program knows four simple sh commands: echo, cat, sed, and exit.
  59. The version of sed that I've implemented is SEVERELY limited, but does
  60. manage to unshar all of the shar files I've seen which use sed. If sh
  61. finds any other commands, it ignores them.
  62.  
  63. Sh is invoked as
  64. sh [options] [filename]
  65. If the filename is omitted, the standard input is taken. The options
  66. can be given individually (e.g. -s1 -o1), or combined (e.g. -s1o1).
  67. The options are as follows:
  68. -v0 == verbosity of zero. Don't print what isn't understood
  69. -v1 == verbosity of one. Print what isn't understood
  70. -v2 == verbosity of two. Print what isn't understood and commands as
  71.        they are executed. This will only echo the cat and sed
  72.        commands. I thought that echoing the 'echo' command was rather
  73.        silly, as is echoing 'exit'.
  74. -v  == without a number is defaults to -v1
  75. -s0 == safety off. Continue if something is not understood
  76. -s1 == safety on. Stop the first time something is not understood (in
  77.        case you are paranoid).
  78. -s  == defaults to -s1
  79. -o0 == overwrite off. Don't check for overwriting existing files.
  80. -o1 == overwrite on. Don't overwrite files if they already exist
  81. -o  == defaults to -o1
  82.  
  83. The defaults as compiled into the program are:
  84. -v1 -s0 -o1
  85.  
  86. Known bugs:
  87.   In evaluating tokens, I handle quotes properly. The only escape
  88. character for which I check, however, is the back-slash, '\'. This is
  89. removed, and the next character is taken as is. If a token contains
  90. any other escape characters, then it won't be parsed properly.  If
  91. this happens to the token following the '<<', then essentially all of
  92. the shar file will be dumped into the first file that was to be
  93. unshared.  This is a good indication that funny characters are around.
  94. If this happens, then the easiest way to fix it is to zip into your
  95. favorite editor and change one of the pair of terminating string to
  96. match the other. This can usually be done with one global search and
  97. replace (once you know the changes to be made). 
  98.  
  99. Programmer's Notes:
  100.   The program is designed to be modular and easily enhanced to
  101. understand a new shar form. It currently understands the following:
  102. cat << some-string > file-name
  103. cat << some-string >> file-name
  104. sed s/^X// << some-string > file-name
  105. sed s/^X// << some-string >> file-name
  106.  
  107. where the sed quote character (e.g. '/') can be anything and the sed
  108. 'X' character can be anything. Additionally, the ordering of the
  109. arguments is unimportant as is whether a space follows the indirection
  110. operators. In other words, this would also be accepted:
  111. cat >file-name <<"some string"
  112.  
  113. Just as a side note, it was compiled under lattice 4.0. It should be
  114. fairly portable, but I make no guarrantees.
  115.  
  116. If you have any comments, suggestions, or you just want to say hi, I
  117. can be reached at:
  118. guilford@turing.cs.rpi.edu
  119. guilford@csv.rpi.edu
  120. ...!rutgers!nysernic!rpics!guilford
  121.  
  122. ***EOF README***
  123. echo "Creating sh.c"
  124. cat > sh.c <<"***EOF sh.c***"
  125. /* sh - JimG's version of sh to unshar files */
  126. char *help = "\
  127. Usage: sh [-v(012)] [-s(01)] [-o(01)] [filename]\n\
  128.   -v = verbosity\n\
  129.     0 = print nothing\n\
  130.     1 = print anything not understood\n\
  131.     2 = echo commands as they are executed\n\
  132.   -s = safety\n\
  133.     1 = exit when something is not understood\n";
  134. char *help2 = "\
  135.   -o = overwrite\n\
  136.     1 = don't overwrite existing files\n\
  137.   filename\n\
  138.     read shar file from here (or stdin if missing)\n";
  139.  
  140. #define NDEBUG
  141.  
  142. #include <stdio.h>
  143. #include <stdlib.h>
  144. #include <string.h>
  145. #include <assert.h>
  146.  
  147. #define ST_CMDLINE    1
  148. #define ST_CAT        2
  149. #define ST_SED        3
  150.  
  151. #define TST_OUT        1
  152. #define TST_QUOTE    2
  153. #define TST_ALPHA    3
  154. #define TST_DIR        4
  155.  
  156. #define BUFSIZE 161
  157. char buf1[BUFSIZE], buf2[BUFSIZE];
  158. char *buff1end = buf1 + BUFSIZE;
  159.  
  160. unsigned short int verbosity = 1;
  161. unsigned short int safety = 0;
  162. unsigned short int overwrite = 1;
  163.  
  164. FILE *fopen(char*,char*);
  165. void sh(FILE*);
  166. int tokenize(char**,int,char*);
  167. void bumpstr(char*);
  168. void ind_error(char**,int);
  169. void fileparse(char**,int,char*,FILE**);
  170. int fillbuffer(char*,int,FILE*);
  171. int match(char*,char*);
  172. void ptokens(char**,int,FILE*);
  173.  
  174. int
  175. fillbuffer(buf,len,fp)        /* This will read up to len-1 characters */
  176. char *buf;
  177. int len;
  178. FILE *fp;
  179. {
  180.     register int i, c;
  181.     
  182.     for (i=1; i<len; i++) {
  183.         c = getc(fp);
  184.         if (c == EOF) break;
  185.         *(buf++) = c;
  186.         if (c == '\n') break;
  187.     }
  188.     *buf = 0;
  189.     return (c);
  190. }
  191.  
  192. main(argc,argv)
  193. int argc;
  194. char *argv[];
  195. {
  196.     register FILE *fp;
  197.     register char *s;
  198.     
  199.     while ((--argc > 0) && ((*++argv)[0] == '-'))
  200.         for (s = argv[0]+1; *s != '\0'; s++)
  201.         switch (*s) {
  202.         case 'v':
  203.             switch (s[1]) {
  204.             case '0':
  205.             case '1':
  206.             case '2':
  207.                 verbosity = (*++s) - '0';
  208.                 break;
  209.             default:
  210.                 verbosity = 1;
  211.                 break;
  212.             }
  213.             break;
  214.         case 's':
  215.             switch(s[1]) {
  216.             case '0':
  217.             case '1':
  218.                 safety = (*++s) - '0';
  219.                 break;
  220.             default:
  221.                 safety = 1;
  222.                 break;
  223.             }
  224.             break;
  225.         case 'o':
  226.             switch(s[1]) {
  227.             case '0':
  228.             case '1':
  229.                 overwrite = (*++s) - '0';
  230.                 break;
  231.             default:
  232.                 overwrite = 1;
  233.                 break;
  234.             }
  235.             break;
  236.         default:
  237.             fputs("sh: illegal option ",stderr);
  238.             putc(*s,stderr);
  239.             putc('\n',stderr);
  240.             exit(10);
  241.             break;
  242.         }
  243.     switch (argc) {
  244.     case 0:    sh(stdin);
  245.         break;
  246.     case 1:    fp = fopen(argv[0],"r");
  247.         if (fp == NULL) {
  248.             fputs("Error - can't open file: ",stderr);
  249.             fputs(argv[0],stderr);
  250.             putc('\n',stderr);
  251.             exit(10);
  252.         }
  253.         sh(fp);
  254.         fclose(fp);
  255.         break;
  256.     default:
  257.         fputs(help,stderr);
  258.         fputs(help2,stderr);
  259.         exit(5);
  260.     }
  261.     return (0);
  262. }
  263.  
  264. int
  265. match(pat,str)
  266. register char *pat, *str;
  267. {
  268.     while (*pat != '\0')
  269.         if (*pat++ != *str++) return (0);
  270.     return(1);
  271. }
  272.  
  273. void
  274. sh(fp)
  275. FILE *fp;
  276. {
  277.     int state = ST_CMDLINE;
  278.     int oldc, c, tcnt;
  279.     FILE *outfp;
  280.     char *tokens[20];
  281.     char schar;
  282.  
  283.     oldc = '\n';
  284.     while ((c = fillbuffer(buf1, BUFSIZE, fp)) != EOF ) {
  285.     switch (state) {
  286.     case ST_CMDLINE:
  287.         if (oldc != '\n') break;
  288.         if (*buf1 == '#') break;
  289.         tcnt = tokenize(tokens, 20, buf1);
  290.         if (tcnt == 0) break;
  291.         if (strcmp(tokens[0],"echo") == 0) {
  292.             ptokens(tokens+1,tcnt-1,stdout);
  293.         } else if (strcmp(tokens[0],"cat") == 0) {
  294.             fileparse(tokens,tcnt,buf2,&outfp);
  295.             if (*buf2) {
  296.                 state = ST_CAT;
  297.                 if (verbosity == 2) {
  298.                     fputs("I am executing:   ",stdout);
  299.                     ptokens(tokens,tcnt,stdout);
  300.                 }
  301.             } else if (outfp != stdout) fclose(outfp);
  302.         } else if (strcmp(tokens[0],"sed") == 0) {
  303.             fileparse(tokens,tcnt,buf2,&outfp);
  304.             if (*buf2) {
  305.                 if (verbosity == 2) {
  306.                 fputs("I am executing:   ",stdout);
  307.                 ptokens(tokens,tcnt,stdout);
  308.                 }
  309.                 if ((tokens[1][0] == 's') &&
  310.                 (tokens[1][1] == tokens[1][4]) &&
  311.                 (tokens[1][2] == '^') &&
  312.                 (tokens[1][5] == tokens[1][1])) {
  313.                     schar = tokens[1][3];
  314.                     state = ST_SED;
  315.                 } else {
  316.                 fputs("Warning -- unknown sed option\n",stderr);
  317.                 fputs(tokens[1],stderr);
  318.                 fputs("\nI am treating it as a 'cat'\n",stderr);
  319.                 fflush(stderr);
  320.                 state = ST_CAT;
  321.                 }
  322.             } else if (outfp != stdout) fclose(outfp);
  323.         } else if (strcmp(tokens[0], "exit") == 0) {
  324.             return;
  325.         } else {
  326.             if (verbosity > 0) {
  327. /*              fputs("I don't understand and am ignoring:\n",stdout);*/
  328.               fputs("Don't understand: ",stdout);
  329.               ptokens(tokens,tcnt,stdout);
  330.             }
  331.             if (safety == 1) exit(5);
  332.         }
  333.         break;
  334.     case ST_CAT:
  335.         if ((oldc == '\n') && (match(buf2,buf1))) {
  336.             state = ST_CMDLINE;
  337.             if (outfp != stdout) fclose(outfp);
  338.         } else fputs(buf1,outfp);
  339.         break;
  340.     case ST_SED:
  341.         if ((oldc == '\n') && (match(buf2,buf1))) {
  342.             state = ST_CMDLINE;
  343.             if (outfp != stdout) fclose(outfp);
  344.         } else if ((oldc == '\n') && (*buf1 == schar))
  345.             fputs(buf1+1,outfp);
  346.         else fputs(buf1,outfp);
  347.         break;
  348.     default:
  349.         fputs("\nInternal Error -- unknown state!\n",stderr);
  350.         exit(20);
  351.     }
  352.     oldc = c;
  353.     }
  354. }
  355.  
  356. void
  357. ptokens(tokens, size, fp)
  358. char *tokens[];
  359. int size;
  360. FILE *fp;
  361. {
  362.     register int i;
  363.     
  364.     for (i = 0; i < (size - 1); i++) {
  365.         fputs(tokens[i],fp);
  366.         putc(' ',fp);
  367.     }
  368.     if (size > 0) fputs(tokens[size - 1],fp);
  369.     putc('\n',fp);
  370.     fflush(fp);
  371. }
  372.  
  373. int
  374. tokenize(tokens, tsize, buf)
  375. char *tokens[];
  376. int tsize;
  377. char *buf;
  378. {
  379.     register char c;
  380.     char quote;
  381.     int tcnt;
  382.     char *tbuf;
  383.     int state;
  384.  
  385.     tcnt = 0;
  386.     state = TST_OUT;
  387.     for (; ((c = *buf) != NULL); buf++) {
  388.         switch (state) {
  389.         case TST_OUT:
  390.         switch (c) {
  391.         case ' ':
  392.         case '\t':
  393.         case '\n':
  394.             break;
  395.         case '\'':
  396.         case '"':
  397.         case '`':
  398.             quote = c;
  399.             state = TST_QUOTE;
  400.             if (tcnt >= tsize) return(tsize);
  401.             tokens[tcnt++] = tbuf = (buf + 1);
  402.             tbuf++;
  403.             break;
  404.         case '<':
  405.         case '>':
  406.             state = TST_DIR;
  407.             if (tcnt >= tsize) return(tsize);
  408.             tokens[tcnt++] = tbuf = buf;
  409.             tbuf++;
  410.             break;
  411.         case '\\':
  412.             buf++;
  413.         default:
  414.             state = TST_ALPHA;
  415.             if (tcnt >= tsize) return(tsize);
  416.             tokens[tcnt++] = tbuf = buf;
  417.             tbuf++;
  418.             break;
  419.         } /* end of switch (c) */
  420.         break;
  421.         case TST_QUOTE:
  422.         if (c == quote) {
  423.             *buf = 0;
  424.             state = TST_OUT;
  425.         } else {
  426. /*            *tbuf++ = c; */        /* Currently no-op */
  427.         }
  428.         break;
  429.         case TST_DIR:
  430.         if ((c != '>') && (c != '<')) {
  431.             if ((c != ' ') &&
  432.                 (c != '\t') &&
  433.                 (c != '\n')) bumpstr(buf);
  434.             *buf = 0;
  435.             state = TST_OUT;
  436.         } else {
  437. /*            *tbuf++ = c; */        /* Currently no-op */
  438.         }
  439.         break;
  440.         case TST_ALPHA:
  441.         if ((c == ' ') ||
  442.             (c == '\t') ||
  443.             (c == '\n')) {
  444.             *tbuf = 0;
  445.             state = TST_OUT;
  446.         } else if (c != '\\') {
  447.             *tbuf++ = c;
  448. /*            *tbuf++ = c; */        /* Currently no-op */
  449.         }
  450.         break;
  451.         } /* end switch (state) */
  452.     }
  453.     return (tcnt);
  454. }
  455.  
  456. void
  457. bumpstr(buff)        /* buff has to be a pointer in buf1 !!!!! */
  458. register char *buff;
  459. {
  460.     register char c1, c2;
  461.     
  462.     assert(((buff >= buf1) && (buff < buff1end)));
  463.  
  464.     c1 = *buff++;
  465.     while (buff != buff1end) {
  466.         c2 = *buff;
  467.         *buff++ = c1;
  468.         if ((buff == buff1end) || (c1 == 0)) break;
  469.         c1 = *buff;
  470.         *buff++ = c2;
  471.         if (c2 == 0) break;
  472.     }
  473. }
  474.  
  475. void
  476. ind_error(tokens, tcnt)
  477. char *tokens[];
  478. int tcnt;
  479. {
  480.     fputs("Error in indirection -- ignored\n",stderr);
  481.     ptokens(tokens,tcnt,stderr);
  482. }
  483.  
  484. void
  485. fileparse(tokens, tcnt, buf, outfp)
  486. char *tokens[];
  487. int tcnt;
  488. char *buf;
  489. FILE **outfp;
  490. {
  491.     int i;
  492.  
  493.     *buf = 0;
  494.     *outfp = NULL;
  495.     
  496.     for (i=0; i < tcnt; i++) {
  497.         if (strcmp(">",tokens[i])==0) {
  498.         if (*outfp) ind_error(tokens,tcnt);
  499.         else if (++i == tcnt) ind_error(tokens,tcnt);
  500.         else {
  501.             if (overwrite == 1) {
  502.                 *outfp = fopen(tokens[i],"r");
  503.                 if (*outfp != NULL) {
  504.                 fputs("Warning: will not overwrite: ",stderr);
  505.                 fputs(tokens[i],stderr);
  506.                 putc('\n',stderr);
  507.                 fflush(stderr);
  508.                 fclose(*outfp);
  509.                 tokens[i]="nil:";
  510.                 }
  511.             }
  512.             *outfp = fopen(tokens[i],"w");
  513.             if (*outfp == NULL) ind_error(tokens,tcnt);
  514.         }
  515.         } else if (strcmp(">>",tokens[i])==0) {
  516.         if (*outfp) ind_error(tokens,tcnt);
  517.         else if (++i == tcnt) ind_error(tokens,tcnt);
  518.         else {
  519.             *outfp = fopen(tokens[i],"a");
  520.             if (*outfp == NULL) ind_error(tokens,tcnt);
  521.         }
  522.         } else if (strcmp("<<",tokens[i])==0) {
  523.         if (*buf) ind_error(tokens,tcnt);
  524.         else if (++i == tcnt) ind_error(tokens,tcnt);
  525.         else strcpy(buf,tokens[i]);
  526.         }
  527.     } /* end for */
  528.     if (*outfp == NULL) *outfp = stdout;
  529. }
  530.  
  531. ***EOF sh.c***
  532. echo "Creating sh.uu"
  533. cat > sh.uu <<"***EOF sh.uu***"
  534.  
  535. begin 644 sh
  536. M```#\P`````````#``````````(```9A```#%P```@0```/I```&84CG?OY++
  537. M[P`T)$@D`$GY`````"QX``0I3@!`*4\`3$*L`$B3R4ZN_MHF0"EK`)@`.$JK]
  538. M`*QG``!P(`V0K0`$!H````"`*4``!&$``7H@:P"LT<C1R")H`!#3R=/)(`)R/
  539. M`!(9*4D`5-"!4H!"9U*``D#__I_`58!"=P@`(`)3@-2!'[(``"``4X)1R/_VA
  540. M'[P`("``4X(?L2``(`!1RO_X(D\O"6```&PI:P`Z``0&K````(``!&$``0YA@
  541. M``#X*4``2"\`)$`@*@`D9Q(L;`2H($`B*```*4$`.$ZN_X(B*@`@9QHD/```]
  542. M`^U.KO_B*4``4&<*Y8@@0"=H``@`I"!L`$@O"$AL```@:``D*6@`!`!41_D`3
  543. M``2\<@`@/````-5@`B;!4<C__$ZZ$;QP`&`$("\`!"\`("P`+&<$($!.D$ZZ4
  544. M!\(L>``$(FP$J$ZN_F)*K`2P9P@B;`2P3J[^8DJL!+1G"")L!+1.KOYB2JP`S
  545. M6&<((FP`6$ZN_F)*K`!(9R0B+``\9P1.KO_<(BP`4&<$3J[_W"QX``1.KO]\=
  546. M(FP`2$ZN_H8@'RYL`$Q,WW]^3G5P9&"`0>L`7$ZN_H!!ZP!<3J[^C$YU0^P`<
  547. M7'``3J[]V"E`!*AGVDYU``!(YS`R+'D```2L(&\`&")O`!PD;P`@)F\`)"`OK
  548. M`"@B+P`L)"\`,"8O`#1.KOZD3-],#$YU3E7__$CG(`!P`"E``!A*K0`(:R0DE
  549. M+0`(M*P$%&P:(@+G@4'L!M`B2-/!2I%G"B("YX'1P2`(8`AP"2E``W!P`$S?J
  550. M``1.74YU`"/D9P`CVP```````1(`(]M>```RW``C3E7_^"\M``A.NO^66$\KK
  551. M0/_X2H!F!'#_8#8@;?_X""@``@`#9P9P`""`8"1"K?_\+R@`!$ZZ%=)83TJL[
  552. M`!AG!G#_*T#__"!M__A"D"`M__Q.74YU2JP$K&820^P#7'``+'@`!$ZN_=@ID
  553. M0`2L*6P`5`,02'@`*$AX`/IP`"\`+P!(;`-(+P!(;`,N+P!.NO[>3^\`($AX@
  554. M`!1.NA,"6$].=2`M__Q.74YU`"0-*$Y5__1(YP`@1>P#?+3\``!G-@@J``(``
  555. M&V8J""H``0`;9R(@*@`$D*H`$"M`__A*@&<2+P`O*@`0+RH`'$ZZ"B)/[P`,*
  556. M)%)@Q"\M``A.NA*B6$],WP0`3EU.=0``Y+L`````<&%.5?_T(&T`"`@H``$`*
  557. M&V<2+PA(>/__3KH+]%!/*T#__&`&<``K0/_\(&T`""`H`!@"@`````Q*@&848
  558. M2J@`%&<.+R@`%"\H`!!.N@@J4$\@;0`(+R@`'$ZZ_IA83RM`__@,K?______)
  559. M_&<$2H!G!'#_8`)P`$Y=3G5.5?_X0>P#?"M(__Q*K?_\9QH@;?_\2J@`&&<0[
  560. M*VW__/_X(&W__"M0__Q@X$JM__QF+$AX`").N@*$6$\K0/_\2H!F!'``8"@@5
  561. M;?_X(*W__'`A<@`@;?_\$,%1R/_\+RW__"\M``PO+0`(80A/[P`,3EU.=4Y5#
  562. M_^X@;0`02J@`&&<(+PA.NO\"6$\K;`-X__0K;0`,__`@;?_P$"@``0)``/\,$
  563. M0`!B9PP,0`!A9A)"K?_T8`@K?```@`#_]%*M__`@;?_P#"@`*P`!5\!$`$B`+
  564. M2,`@;0`,$A`"00#_&T#_[PQ!`'=G``":#$$`<F=*#$$`868``-Y(>``,+SP`L
  565. M`($"+RT`"$ZZ!*I/[P`,*T#_^%*`9@9P`&```/Q*+?_O9P@@/````(!@`G`"7
  566. M`(```$``*T#__&```*!*+?_O9P1P`F`"<```@```@`!(>``,+P`O+0`(3KH$E
  567. M6D_O``PK0/_X4H!F!G``8```K$HM_^]G""`\````@&`"<`$K0/_\8%9*+?_O$
  568. M9P1P`F`"<`$`@```@```@````0``@````@!(>``,+P`O+0`(3KH$!D_O``PK9
  569. M0/_X4H!F!'``8%A*+?_O9P@@/````(!@`G`"*T#__&`$<`!@/I'((FT`$"-(:
  570. M`!`C2``4(VW_^``<(VD`$``$(T@`#"-(``A*K?_T9P0@"&`&(#P``(``(BW_)
  571. M_(*`(T$`&"`)3EU.=0`CW6@``'!A3E4``"!M``P(*``&`!MG&"(M``@,@0``Z
  572. M``IF#"\(+P%.N@E24$]@/"!M``Q3J``,("@`#$J`:Q0B:``$4J@`!"`M``@2Q
  573. M@'(`$A%@%B`M``@"@````/\O""\`3KH)&%!/(@`@`4Y=3G5.5?_\<``@;0`(C
  574. M$!!2K0`(*T#__$J`9Q0O+0`,+P!.NO]X4$]2@&;<</]@`G``3EU.=0``3E4`M
  575. M`"\M``AA!EA/3EU.=4Y5_^Q(YP,@+BT`"$J';@9P`&```,0,AP````AL`GX(+
  576. M(`<@!U:`Y(#E@"X`0>P$#"10*TC_^+3\``!G3B(J``2RAVT^LH=F$B!2(FW_`
  577. M^"*(GZP$$"`*8```@"`J``20APR`````"&T:($H@2M''()(A0``$(FW_^"*(^
  578. MGZP$$"`*8%8K2O_X)%)@K"`'(BP$N"`'T(%3@$ZZ#;0B+`2X3KH.B%"`+``@V
  579. M!B`&5H#D@.6`+``O!DZZ`'Y83RM`__!*@&<4+P8O`$ZZ!()03R\'80#_,%A/V
  580. M8`)P`$S?!,!.74YU`&%F``#>2'@`#"\\3E7_]B\M``A.NOI66$\K0/_V2H!F6
  581. M!'#_8"HO+0`0+RT`#"!M__8O*``$3KH/O$_O``PK0/_Z2JP`&&<$</]@!"`M(
  582. M__I.74YU3E7_^"`M``@&@`````PO0```("\``'(`+'@`!$ZN_SHK0/_\2JW_1
  583. M_&8$<`!@-"`M``@&@`````P@;?_\(4``""\(2&P&`&$``0A03TJL!`!F!BEMX
  584. M__P$`"!M__S0_``,(`A.74YU3E7__"\M``AAD%A/*T#__$J`9@8P?/__(`A.+
  585. M74YU3E7_^$CG`2!A``"`<``I0``0*4``""E```PI0`0,*4`$$"E`!`0I0`0`.
  586. M*4`$"$JL`_QG3"`L!+@B+`/\TH!3@2`!(BP$N$ZZ#$PB+`2X3KH-(%"`+@`@`
  587. M!R`'5H#D@.6`+@`O!V$`_Q983R1`M/P``&8$</]@#"\'+PI.N@+\4$]P`$S?6
  588. M!(!.74YU3E7_^"ML!@#__$JM__QG)"!M__PK4/_X(FW__"!M__P@*``(+'@`A
  589. M!$ZN_RXK;?_X__Q@UI'(*4@&!"E(!@!.74YU3E4``$CG`"`B;0`((&D`!")M+
  590. M``PC2``$D<@BB"1M``A*DF8")(E*J@`$9P8@:@`$((DE20`$3-\$`$Y=3G4`S
  591. M`$ZZ!`9/[P`,*T#_^%*`9@1P`&!82BW_[V<((#P``'!A3E7_YDCG(`!"+?__G
  592. M0JP`&"ML`W#_\G`#*T#_]B(M__:RK`04;!0@`>>`0>P&T-'`2I!G!E*M__9@%
  593. MXB(M__8D+`04M(%F#'`8*4`#<'#_8``!:B`!YX!![`;0T<`K2/_F2JT`$&<(]
  594. M""T``@`39P9"K?_N8`9P`2M`_^X@+`/D`H```(``L:T`#`@M``,`#V<4("T`P
  595. M#`*`_____`"``````BM```P@+0`,`H`````##(`````"9PP,@`````%G!$J`A
  596. M9@P@+0`,4H`K0/_Z8`QP%BE``W!P_V```.(@+0`,(@`"@0```P!*@6<``*((=
  597. M```*9QH;?``!__\O+?_N+RT`"$ZZ#FI03RM`_^I@2`@```EF'$AX`^TO+0`(0
  598. M3KH-:%!/*T#_ZDJ`:@8([0`!``X(+0`!``YG'AM\``'__REM__(#<"\M_^XO_
  599. M+0`(3KH-I%!/*T#_ZDHM__]G1"`M``P"@````/!*@&<V2JW_ZFLP+RW_ZDZZ[
  600. M#5Q83TAX`^TO+0`(3KH-`E!/*T#_ZF`22'@#[2\M``A.N@SN4$\K0/_J2JP`?
  601. M&&<$</]@$B!M_^8@K?_Z(6W_Z@`$("W_]DS?``1.74YU3E4``"`M``PB``*!7
  602. M``"```"!```#`0*`__]__R\`+P$O+0`(80#^&$_O``Q.74YU```C2``(2JUP/
  603. M84Y5__@O+0`(3KKV8EA/*T#__$J`9@1P_V`J+RT`$"\M``P@;?_\+R@`!$ZZX
  604. M"RA/[P`,*T#_^$JL`!AG!'#_8`0@+?_X3EU.=2E``W!P_W!A3E7__"`M``PO?
  605. M`"\M``@K0/_\80903TY=3G5.5?_H2.<A,"XM``Q*AVX&</]@``#R#(<````(0
  606. M;`)^""`'(`=6@.2`Y8`N`"!M``@K2/_TT<??K`000^P$#"11*TC_\"M)__BTV
  607. M_```9P``HB!*("H`!"!*T<`K2/_L)"W_\+7"8Q8B;?_T(HHC1P`$)FW_^":);
  608. M<`!@``",M<)F'B)2)FW_]":)("H`!"(`TH<G00`$(FW_^"*+<`!@:")M__2S5
  609. MR&0(GZP$$'#_8%BSR&8N2I)G#B(2M(%C")^L!!!P_V!"WZH`!$J29Q"TDF8,V
  610. M($(@*``$T:H`!"20<`!@)BM*__@K;?_L_^@D4F``_UH@;?_X(*W_])'((FW_'
  611. M]"*((T<`!"`(3-\,A$Y=3G5.5?_X2.<!`"!M``Q*&&;\4XB1[0`,+@@@;0`(T
  612. M2AAF_%.(D>T`""`((FT`"-/`*TG_^"(M`!"^@6,"+@$@!R!M``Q@`A+84X!D7
  613. M^B!M__A",'@`("T`"$S?`(!.74YU``!.5?_X+RT`"$ZZ](I83RM`__A*@&8$7
  614. M</]@2"!M__@(*``#``-G$DAX``)"IR\M``A.NOH"3^\`#"\M`!`O+0`,(&W_'
  615. M^"\H``1.N@F"3^\`#"M`__Q*K``89P1P_V`$("W__$Y=3G4``$Y5__9(YR`@?
  616. M)&T`""`J`!@B``*!``"``%;"1`)(@DC"(@`"@0```#`;0O__2H%G"D*J``APB
  617. M_V```68(*@`'`!MG%`@J``8`&V<,+PI(>/__3KH!5E!/2JH`%&8X0JH`"`@J<
  618. M``(`&V<4<`$E0``4($K0_``@)4@`$&```((O"DZZ!"!83TJ`9W0(Z@`%`!MPJ
  619. M_V```0Q*+?__9V)4J@`(;EP@:@`$4JH`!'``$!`K0/_Z#(`````:9S`,@```%
  620. M``UF-%.J``@@*@`(2H!K$"!J``12J@`$<``0$&```,0O"F$`_R!83V```+@(%
  621. MZ@`$`!MP_V```*P@+?_Z8```I`@J``$`&V92".H````;+RH`%"\J`!`O*@`<L
  622. M3KK\J$_O``PK0/_V2H!J!@CJ``4`&TJ`9@8(Z@`$`!M*@&\<2BW__V<*(@!$*
  623. M@25!``A@!"5```@@:@`0)4@`!"`J`!@"@````#)*@&<82BW__V<(</\E0``(J
  624. M8`9P`"5```AP_V`B4ZH`""`J``A*@&L.(&H`!%*J``1P`!`08`@O"F$`_F98J
  625. M3TS?!`1.74YU``!.5?_L2.<@("1M``P@+0`((BH`&"0!`H(````Q*T#_]$J"'
  626. M9P9P_V```L@@`0*```"``%;"1`)(@DC"&T+__DJJ`!1F``"2"`$``F8``(IP@
  627. M`"5```P,K?____\`"&<``I(O"DZZ`I183TJ`9PP(Z@`%`!MP_V```GH(Z@`!T
  628. M`!M*+?_^9PX@*@`4(@!$@25!``Q@""`J`!0E0``,4ZH`#"`J``Q*@&L4(&H`D
  629. M!%*J``0@+0`($(!R`!(08!8@+0`(`H````#_+PHO`&$`_S903R(`(`%@``(<G
  630. M""H``@`;9V@B+0`(#('_____9@9P`&```@(;0?__2BW__F<F#($````*9AYPD
  631. M`B\`2&P#="\J`!PK0/_P3KK\W$_O``PK0/_X8!QP`2\`2&W__R\J`!PK0/_P5
  632. M3KK\OD_O``PK0/_X</\K0``(8```_`CJ``$`&THM__YG5B(M``@,@?____]GR
  633. M2E2J``P,@0````IF(B!J``12J@`$$+P`#4JJ``QK#"\*2'C__V$`_GQ03U*J^
  634. M``P@:@`$4JH`!"`M``@0@$JJ``QK``%0</\K0``(("H`!)"J`!`K0/_P2H!G`
  635. M``""""H`!@`:9UY(>``"0J<O*@`<3KKV5D_O``PK0/_L2BW__F="4ZW_["`M"
  636. M_^Q*@&LV0J<O`"\J`!Q.NO8P3^\`#$AX``%(;?_]+RH`'$ZZ^A!/[P`,2JP`4
  637. M&&8,$"W__0P``!IGP$YQ+RW_\"\J`!`O*@`<3KK[PD_O``PK0/_X8`9P`"M`J
  638. M__@B+?_X#('_____9@@(Z@`%`!M@#+*M__!G!@CJ``0`&THM__YG#B`J`!0BG
  639. M`$2!)4$`#&`8""H``@`;9PAP`"5```Q@""`J`!0E0``,(&H`$"5(``0B+0`(G
  640. M#('_____9RQ3J@`,("H`#$J`:Q`@:@`$4JH`!!"!<``0$&`0`H$```#_+PHO)
  641. M`6$`_3A03R`J`!@"@````#!*@&<$</]@$B(M__0,@?____]F!'``8`(@`4S?S
  642. M!`1.74YU3E4``"!M``A*J``49PP(*``#`!MF!'``8#PO+`,`3KKT$%A/(&T`)
  643. M""%```0A0``02H!F"G`,*4`#<'#_8!@A;`,``!0"J/____,`&'``(4``#"%`K
  644. M``A.74YU```"E%A/2H!P84Y5__!(YP$P)&T`"`RL````(`8,;```D!(2#`$`P
  645. M(&<,#`$`"6<&#`$`"F8$4HI@Z$H29W(@+`8,Y8!2K`8,0>P&%-'`*TC__`P2G
  646. M`")F*%**((I*$F<*#!(`(F<$4HI@\DH29@Q(>``!3KH"NEA/8)Q"$E**8)8@8
  647. M;?_\((I*$F<8$A(,`0`@9Q`,`0`)9PH,`0`*9P12BF#D2A)F`F`(0A)2BF``:
  648. M_VA*K`8,9@8@;`!(8`1![`84*4@&$$JL!@QF``"&0>P#Z")(1^P&E";9)MDF(
  649. MV2;9-I$F;`!((FL`)$AX`"@O*0`$2&P&E$ZZ^4A/[P`,0>P&E"(()#P```/N1
  650. M+&P$J$ZN_^(I0`;4("P&U"E`!MQR!"E!!M@I0`;D*4$&X.6`*T#_\)/)+'@`U
  651. M!$ZN_MHK0/_T(&W_\")M__0C:``(`*1^`&`R+&P$J$ZN_\HI0`;4+&P$J$ZN'
  652. M_\0I0`;<0>P#^B(()#P```/M+&P$J$ZN_^(I0`;D?@0@!R`'`(```(`!@:P&J
  653. MT"`'(`<`@```@`*!K`;8`*P``(`#!N!*K`-X9P1P`&`&(#P``(``+@!"K`.8%
  654. M(`<@!P"``````2E``Y1P`2E``[H@!R`'`(`````"*4`#MG`"*4`#W"`'(`<`@
  655. M@````(`I0`/80?H!UBE(`#`O+`80+RP&#$ZZ`")03T*G3KKN,EA/3-\,@$Y=X
  656. M3G4``$S?!`1.74YU`````$[Y````<`!0!0#__TJ`:@``'D2`2H%J```,1(%AK
  657. M```@1(%.=6$``!A$@$2!3G5*@6H```Q$@6$```9$@$YU+P)(030!9@``(DA`@
  658. M2$%(0C0`9P``!H3!,`)(0#0`A,$P`DA",@(D'TYU+P-V$`Q!`(!D```&X9E1<
  659. M0PQ!"`!D```&Z9E90PQ!(`!D```&Y9E50TI!:P``!N.94T,T`.:H2$)"0N:J[
  660. M2$.`P38`,`(T`TA!Q,&0@F0```A30]"!9/YR`#(#2$/GN$A`PT`F'R0?3G4N5
  661. M>0```$Q.N0```L`O/````!1.N0```Q@@0B)#)``F`4A"2$/$P<;`P,'40TA"#
  662. M0D+0@B8))`A.=4Y5__A(YP$@?@!%[`;0OJP$%&P>2I)G%`@J``(``V<"8`HO_
  663. M*@`$3KH"1%A/4H=0BF#<+RT`#"\M``A.NNKJ4$],WP2`3EU.=4Y5__QP`"(\B
  664. M```P`"QX``1.KO[.`H```#``*T#__$J`9@1P`&`D2JP`,&<:(&P`,$Z02H!F1
  665. M!'``8!!"ITAX`!1.NO]V4$\@+?_\3EU.=6&P3G4``$JL!*QF$D/L!)1P`"QX`
  666. M``1.KOW8*4`$K"EL`%0$5$AX`#Q(>`#Z<``O`"\`2&P$@$AL!&9(;`1(+P!.&
  667. MNNKX3^\`(%.`9P1P_V`"<`!.=0``3E7__$CG`0!*K``P9P1.NO],0JP`&"(M#
  668. M``@D+0`,)BT`$"QL!*A.KO_6+@`,A_____]F$BQL!*A.KO]\*4``&'`%*4`#O
  669. M<"`'3-\`@$Y=3G5.5?_\2.<!`$JL`#!G!$ZZ_OQ"K``8(BT`""0M``PF+0`0N
  670. M+&P$J$ZN_]`N``R'_____V82+&P$J$ZN_WPI0``8<`4I0`-P(`=,WP"`3EU.<
  671. M=4Y5__A(YS$"2JP`,&<$3KK^K$*L`!@@+0`04X`O0``0(BT`""0M``PF+P`0"
  672. M+&P$J$ZN_[XN``R'_____V82+&P$J$ZN_WPI0``8<!8I0`-P("T`$`R`````Y
  673. M`F<<#(`````!9PI*@&8B("T`#&`<(`<@!]"M``Q@$B(M``AT`'8`+&P$J$ZNT
  674. M_[Y.<4S?0(Q.74YU``!.5?_\2.<!`$JL`#!G!$ZZ_AA"K``8(BT`""0M``PL$
  675. M;`2H3J[_XBX`2H=F%BQL!*A.KO]\*4``&'`"*4`#<'#_8`(@!TS?`(!.74YU+
  676. M3E4``$JL`#!G!$ZZ_=`B+0`(+&P$J$ZN_]QP`$Y=3G5.5?_\2JP`,&<$3KK]-
  677. ML$*L`!@B+0`(=/XL;`2H3J[_K"M`__Q*K?_\9Q@B+?_\+&P$J$ZN_Z8B+0`('
  678. M+&P$J$ZN_[@B+0`()#P```/N+&P$J$ZN_^(K0/_\2JW__&86+&P$J$ZN_WPIX
  679. M0``8<`(I0`-P</]@!"`M__Q.74YU3E7__$JL`#!G!$ZZ_31"K``8(BT`"'3^F
  680. M+&P$J$ZN_ZPK0/_\2JW__&<0(BW__"QL!*A.KO^F</]@-B(M``@D/````^XL"
  681. M;`2H3J[_XBM`__Q*K?_\9A8L;`2H3J[_?"E``!AP`BE``W!P_V`$("W__$Y=9
  682. M3G4```/L`````@```````!7D```5V`````$````!```5`@````0````"```5.
  683. MT@```=X```$2````#@````````/R```#Z0```Q=.5?_X2.<#`+_L``1E``PB;
  684. M?@&^K0`,;$@@;0`04Z@`""`H``A*@&L.(F@`!%*H``1P`!`18`@O"$ZZ#!I8?
  685. M3RP`#(;_____9Q@@!B!M``@0@%*M``@,A@````IG!%*'8+(@;0`(0A`@!DS?$
  686. M`,!.74YU3E7_^$CG`""_[``$90`+LE.M``@@+0`(2H!O``%^6*T`#")M``P@)
  687. M41`0#```+68``6I2B"M(__@@;?_X2A!GT!`02(`,0`!O9P``C@Q``'-G2@Q`H
  688. M`'9F``"\(&W_^!`H``%(@`Q``#)G#`Q``#%G!@Q``#!F'%*M__@@;?_X$!!(8
  689. M@$C`!(`````P.4`!P&```0(Y?``!`<!@``#X(&W_^!`H``%(@`Q``#%G!@Q`C
  690. M`#!F'%*M__@@;?_X$!!(@$C`!(`````P.4`!PF```,8Y?``!`<)@``"\(&W_3
  691. M^!`H``%(@`Q``#%G!@Q``#!F'%*M__@@;?_X$!!(@$C`!(`````P.4`!Q&``=
  692. M`(HY?``!`<1@``"`2&P#P$AL`<9.N@K`4$]3K`/,("P#S$J`:Q8@;`/$4JP#0
  693. MQ")M__@0$1"`<@`2$&`6<``@;?_X$!!(;`/`+P!.N@IX4$\B`%.L`\P@+`/,S
  694. M2H!K$B!L`\12K`/$<`H0@'(`$A!@$$AL`\!(>``*3KH*2E!/(@!(>``*3KH*G
  695. M2EA/4JW_^&``_J`@+0`(#(`````!9Q1*@&8``)!(;`-\80``\%A/8```J$ALI
  696. M`=H@;0`,+Q!.N@H`4$\D0+3\``!F5DAL`\!(;`'<3KH*`E!/2&P#P"!M``PON
  697. M$$ZZ"?)03U.L`\P@+`/,2H!K$B!L`\12K`/$<`H0@'(`$A!@$$AL`\!(>``*)
  698. M3KH)M%!/(@!(>``*3KH)M%A/+PIA``!V6$\O"DZZ"9Y83V`F2&P#P"\L`4).K
  699. MN@F:4$](;`/`+RP!N$ZZ"8Q03TAX``5.N@E\6$]P`$S?!`!.74YU3E4``$CG;
  700. M(""_[``$90`)2"1M``A*$F<6$!)2BB!M``P2$%*M``RP`6?J<`!@`G`!3-\$/
  701. M!$Y=3G5.5?^:2.<@(+_L``1E``D0<`$K0/_\<`HK0/_X+RT`"$AX`*%(;`2\V
  702. M80#\Q$_O``PK0/_T4H!G``-0("W__`R``````V<``K0,@`````)G``)<#(``H
  703. M```!9@`##`RM````"O_X9@`#&!`L!+P,```C9P`##$AL!+Q(>``42&W_G&$`+
  704. M`]I/[P`,*T#_\$J`9P`"[B!M_YQ#[`'V)$D0&+`:9@1*`&;V9AP@+?_P4X!(X
  705. M;`.>+P!(;?^@80`"UD_O``Q@``*\(&W_G$7L`?PB2A`8L!EF!$H`9O9F;DAM]
  706. M_^Q(;`5=+RW_\$AM_YQA``7*3^\`$$HL!5UG-G`"*T#__#`L`<!50&8``GA(!
  707. M;`.>2&P"`$ZZ""I03TAL`YXO+?_P2&W_G&$``FQ/[P`,8``"4D'L`YXB+?_LA
  708. ML<%G``)$+P%.N@?P6$]@``(X(&W_G$/L`A0D21`8L!IF!$H`9O9F``#P2&W_U
  709. M[$AL!5TO+?_P2&W_G&$`!41/[P`02BP%76<``+8P+`'`54!F(DAL`YY(;`(8G
  710. M3KH'JE!/2&P#GB\M__!(;?^<80`![$_O``P@;?^@$!`,``!S9CPB2%*))$A86
  711. MBA`1$A*P`68L(DA4B1`1#```7F8@(DA:B21(4HH0$1(2L`%F$%:(&U#_FW`#!
  712. M*T#__&```8Y(;`/`2&P"+$ZZ!T!03TAL`\`O+?^@3KH',E!/2&P#P$AL`DQ.U
  713. MN@<D4$](;`/`2'C__TZZ!P103W`"*T#__&```4Q![`.>(BW_[+'!9P`!/B\!`
  714. M3KH&ZEA/8``!,B!M_YQ%[`)J(DH0&+`99@1*`&;V9@1@``$B,"P!P`Q```!C=
  715. M(DAL`YY(;`)P3KH&P%!/2&P#GB\M__!(;?^<80`!`D_O``PP+`'"4T!F``#BB
  716. M2'@`!4ZZ!I)83V```-0,K0````K_^&8R2&P$O$AL!5UA`/T(4$]*@&<@<`$K.
  717. M0/_\0>P#GB(M_^RQP6<``*0O`4ZZ!E!83V```)@O+?_L2&P$O$ZZ!DI03V``_
  718. M`(8,K0````K_^&8N2&P$O$AL!5UA`/RZ4$]*@&<<<`$K0/_\0>P#GB(M_^RQQ
  719. MP6=6+P%.N@8$6$]@3`RM````"O_X9AH0+`2\L"W_FV80+RW_[$AL!+U.N@7LK
  720. M4$]@*"\M_^Q(;`2\3KH%W%!/8!A(;`/`2&P"A$ZZ!<Q03TAX`!1.N@6\6$\KZ
  721. M;?_T__A@`/R63-\$!$Y=3G5.5?_\2.<!`+_L``1E``6`?@`@+0`,4X"^@&Q,Q
  722. M(`<B!^6!+RT`$"!M``@O,!@`3KH%?%!/(&T`$%.H``P@*``,2H!K$B)H``12U
  723. MJ``$<"`2@'(`$A%@#B\(2'@`($ZZ!3Q03R(`4H=@JDJM``QO&"`M``SE@"\MY
  724. M`!`@;0`(+S`(_$ZZ!2I03R!M`!!3J``,("@`#$J`:Q(B:``$4J@`!'`*$H!RG
  725. M`!(18`XO"$AX``I.N@3J4$\B`"\M`!!(>/__3KH$VE!/3-\`@$Y=3G5.5?_RE
  726. M2.<Q`+_L``1E``2T0JW_^G`!*T#_\B!M`!`>$$H'9P`!LB`M__($@`````%M'
  727. M``&<#(`````$;``!DN6`3OL(`F````Y@``$,8``!4&```1@@!TB`<C9=06L`)
  728. M`,"P>Q`(9O1.^Q`$`%Q@``"L`#Y@``!L`#Q@``!F`&!@```@`")@```:`"=@Q
  729. M```4``I@``$\``E@``$V`"!@``$P&T?__G`"*T#_\B(M``PD+?_ZM(%M!B`!G
  730. M8``!("`"Y8!2K?_Z(&T`$%*((FT`"".("``K2/_V4H@K2/_V8```\'`$*T#_9
  731. M\B0M``PF+?_ZMH)M!B`"8```Y"`#Y8!2K?_Z(&T`$")M``@CB`@`*TC_]E*(5
  732. M*TC_]F```+92K0`0<`,K0/_R(BT`#"0M__JT@6T&(`%@``"F(`+E@%*M__H@O
  733. M;0`0(FT`"".("``K2/_V4H@K2/_V8'B^+?_^9G(@;0`00A!P`2M`__)@9`P'<
  734. M`#YG7@P'`#QG6`P'`"!G%`P'``EG#@P'``IG""\M`!!A5%A/(&T`$$(0<`$KO
  735. M0/_R8#`,!P`@9PP,!P`)9P8,!P`*9@X@;?_V0A!P`2M`__)@$`P'`%QG"B!M_
  736. M__80AU*M__92K0`08`#^1B`M__I,WP",3EU.=4Y5__Y(YP,@O^P`!&4``M(D<
  737. M;0`('A)2BB!L`;RQRF<>'!(4AU**(&P!O+'*9Q!*!V<,'A(4AE**2@9FW$YQE
  738. M3-\$P$Y=3G5.50``O^P`!&4``I!(;`/`2&P"J$ZZ`J)03TAL`\`O+0`,+RT`!
  739. M"&$`_.1/[P`,3EU.=4Y5__Q(YR`PO^P`!&4``EH@;0`00A"1R")M`!0BB"M(6
  740. M__PB+?_\LJT`#&P``B`@`>6`0>P"RB1M``@B<@@`)DD2&+(;9@1*`6;V9@`!0
  741. M&B!M`!1*D&<0+RT`#"\*80#_<%!/8``!X%*M__P@+?_\)"T`#+""9@XO`B\*,
  742. M80#_4E!/8``!PC`L`<130&8``*0@+?_\Y8!(;`+,+S((`$ZZ`=!03R!M`!0@#
  743. M@$J`9P``A$AL`\!(;`+.3KH!SE!/("W__.6`2&P#P"!M``@O,`@`3KH!ME!/D
  744. M4ZP#S"`L`\Q*@&L2(&P#Q%*L`\1P"A"`<@`2$&`02&P#P$AX``I.N@%X4$\B9
  745. M`$AL`\!(>/__3KH!:%!/(&T`%"\03KH!8EA/("W__"(`Y8%![`+L(FT`"".(D
  746. M&``@+?_\Y8!(;`+R(&T`""\P"`!.N@$J4$\@;0`4((!*@&8``/(O+0`,+RT`B
  747. M"&$`_G!03V```.`@+?_\Y8!![`+T(G((`"9)$ABR&V8$2@%F]F9B(&T`%$J0<
  748. M9Q`O+0`,+PIA`/X\4$]@``"L4JW__"`M__PD+0`,L()F#B\"+PIA`/X>4$]@)
  749. M``".(@#E@4AL`O@O,A@`3KH`J%!/(&T`%""`2H!F<"\M``PO+0`(80#]\%!/F
  750. M8&`@+?_\Y8!![`+Z(G((`"9)$ABR&V8$2@%F]F9$(&T`$$H09PXO+0`,+PIA!
  751. M`/V^4$]@+E*M__P@+?_\)"T`#+""9@PO`B\*80#]HE!/8!(B`.6!('(8`")("
  752. M)FT`$!;99OQ2K?_\8`#]V"!M`!1*D&8*0>P#GB)M`!0BB$S?#`1.74YU``!.@
  753. M^0``%=!.^0```_1.^0``#XA.^0```WQ.^0```QA.^0``!GQ.^0``#>!P80``P
  754. M`^P````'````````#$0```PX```,2@``##X```Q0```,5@``##(````````#I
  755. M\@```^H```$O````````````````````````````````````````````````/
  756. M`````````````````````````````````````````````````````````````
  757. M``````````````!D;W,N;&EB<F%R>0!5<V%G93H@<V@@6RUV*#`Q,BE=(%LM:
  758. M<R@P,2E=(%LM;R@P,2E=(%MF:6QE;F%M95T*("`M=B`]('9E<F)O<VET>0H)E
  759. M,"`]('!R:6YT(&YO=&AI;F<*"3$@/2!P<FEN="!A;GET:&EN9R!N;W0@=6YDY
  760. M97)S=&]O9`H),B`](&5C:&\@8V]M;6%N9',@87,@=&AE>2!A<F4@97AE8W5TG
  761. M960*("`M<R`]('-A9F5T>0H),2`](&5X:70@=VAE;B!S;VUE=&AI;F<@:7,@3
  762. M;F]T('5N9&5R<W1O;V0*`````&@@("UO(#T@;W9E<G=R:71E"@DQ(#T@9&]NL
  763. M)W0@;W9E<G=R:71E(&5X:7-T:6YG(&9I;&5S"B`@9FEL96YA;64*"7)E860@Z
  764. M<VAA<B!F:6QE(&9R;VT@:&5R92`H;W(@<W1D:6X@:68@;6ES<VEN9RD*````M
  765. M``%&```%70`!`````7-H.B!I;&QE9V%L(&]P=&EO;B``<@!%<G)O<B`M(&-A`
  766. M;B=T(&]P96X@9FEL93H@`&5C:&\``&-A=`!)(&%M(&5X96-U=&EN9SH@("``)
  767. M`'-E9`!)(&%M(&5X96-U=&EN9SH@("```%=A<FYI;F<@+2T@=6YK;F]W;B!S,
  768. M960@;W!T:6]N"@``"DD@86T@=')E871I;F<@:70@87,@82`G8V%T)PH`97AIS
  769. M=```1&]N)W0@=6YD97)S=&%N9#H@```*26YT97)N86P@17)R;W(@+2T@=6YK[
  770. M;F]W;B!S=&%T92$*``!%<G)O<B!I;B!I;F1I<F5C=&EO;B`M+2!I9VYO<F5DI
  771. M"@``/@!R`%=A<FYI;F<Z('=I;&P@;F]T(&]V97)W<FET93H@`&YI;#H``'<`H
  772. M/CX``&$`/#P````````"`/__````#@`.````````````````*BH@4W1A8VL@[
  773. M3W9E<F9L;W<@*BH``/__````!``$`````````Q@```,$15A)5```__\````$L
  774. M``0````````#0@````!I;G1U:71I;VXN;&EB<F%R>0`````````-"@````"`F
  775. M`````YX```````````````````````````````````````````/`````````D
  776. M`````````````````````````````````````````````````````````````
  777. M``````````````````````"``&-O;CHQ,"\Q,"\S,C`O.#`O`"H`````````?
  778. M````````````````````````````*"HJ(%5S97(@06)O<G0@4F5Q=65S=&5DE
  779. M("HJ``#__P````X`#@````````08`````/__````!``$``````````````0TH
  780. M0T].5$E.544``/__````!``$````````!%P`````04)/4E0`__\````$``0`)
  781. M```````$>@````!I;G1U:71I;VXN;&EB<F%R>0``````````````````````$
  782. M``````0````#[`````P````"```$C```!'(```18```$0````YX```-\```#*
  783. =5````SX```,Z```!O````;@```%"`````````_)88
  784. ``
  785. end
  786. size 11144
  787. ***EOF sh.uu***
  788. exit 0
  789. -- 
  790. Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
  791. Have five nice days.
  792.